// 入口文件
import SMERouter from 'sme-router';
import axios from 'axios'

// 引入视图，如果引入的是html，则得到的是字符串，直接供路由 render方法使用
import loginView from '$v/login';
import advView from '$v/adv';
import advListView from '$v/advList'
import adminListView from '$v/adminList'
import request from './util/request';

// 创建路由实例,并且传入一级路由的作用区域（是一个id）
//实例化路由器对象,并且传入一级路由的作用区域(是一个id)
//默认是hash路由模式 访问如下:http://XX.xX.XX.xx:XXXX/#/login
//如果要配置history路由模式,可以添加第二个参数"html5" 此外还需要服务端的配合
const router = new SMERouter('app', 'html5');
//因为在其他位置可能用到router,我们可以把router放在window对象上,router可以在任意位置访问
window.router = router;
//配置路由
router.route("/login", (req, res) => {

  /* 
  req:请求对象,主要包含了请求的路径地址和其他传参的参数
  res:响应对象,只要包含了响应的方法 比如render方法,响应一个渲染
  */

  res.render(loginView());

})

//配置adv 及其 二级路由
router.route("/adv", (req, res, next) => {
  // console.log(req);
  // 
  /* res.render(advView({
    subRoute: res.subRoute()
  })); */
  //读完一级路由 需要去读二级路由,所以要调用next方法
  // res有一个subRoute方法,调用该方法可以得到一个二级路由存放的标识,我们可以把这个标识传递给ejs,放在对应的位置即可
  next(advView({
    subRoute: res.subRoute(),
    //给adv主页传递一个路径,方便在页面内进行url比较进行高亮显示
    url: req.url
  }));
})

router.route("/adv/adminList", (req, res) => {
  //渲染二级路由视图
  // console.log(req);
  res.render(adminListView());
  console.log(document);
  //在sem路由中,在路由的回调函数中可以获取整个document,所以我们可以在这个位置操作DOM

  //添加管理员功能
  //给保存按钮绑定点击事件,添加管理员
  const oSaveAdminBtn = document.getElementById('saveAdminBtn');
  oSaveAdminBtn.onclick =async function () {
    //可以通过表单元素的name属性获取某个元素
    // console.log(document.adminForm);
    // console.log(document.adminForm.adminName);
    // console.log(document.adminForm.password);
    // console.log(document.adminForm.rePassword);
    //获取用户输入的内容
    const adminNameValue = document.adminForm.adminName.value.trim();
    const passwordValue = document.adminForm.password.value.trim();
    const rePasswordValue = document.adminForm.rePassword.value.trim();
    
     //判断所有的输入不能为空
     if (!adminNameValue || !passwordValue || !rePasswordValue) {
      return alert("输入内容不能为空!!!!");
    }

    //判断密码是否一致
    if (passwordValue !== rePasswordValue) {
      return alert("两次输入的密码不一致")
    }

    //向后端发送添加管理员请求
    try {
      await request.post("/addAdmin", {
        adminName: adminNameValue,
        password: passwordValue,
        regTime: new Date().toLocaleString()
      })

      alert('添加成功');
    } catch (e) {
      //请求异常后提示用户
      alert("有异常" + e.message)
    }

  }
  })


router.route("/adv/advList", (req, res) => {
  // console.log(req);
  res.render(advListView())
})



//测试ajax请求 测试后端
//如果请求的是代理,要把某个代理的名称作为请求路径的前缀
// axios.get("/api1/test")